home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 111_01 / mxprint.c < prev    next >
Text File  |  1985-08-19  |  4KB  |  189 lines

  1. /*
  2. HEADER:        ;
  3. TITLE:        MXprint;
  4. VERSION:    1.0;
  5. DATE:        02/28/1982;
  6.  
  7. DESCRIPTION:    "Prints files on Epson MX-80 or MX-100 printers, with
  8.         optional headers and page numbers at the top of each page.
  9.         Will print in normal, emphasized, or condensed modes.
  10.  
  11.         Compilation requires MXPRINT.H.";
  12.  
  13. KEYWORDS:    Print, utility, MX80, MX100;
  14. SYSTEM:        CP/M-80;
  15. FILENAME:    MXPRINT.C;
  16. SEE-ALSO:    MXPRINT.H, MXPRINT.DOC;
  17. AUTHORS:    Joe Shannon;
  18. COMPILERS:    BDS C;
  19. */
  20. /***************************************************************************
  21.  
  22. Version 1.0, 2/28/1982:
  23.     This program is released to public domain with the request that
  24.     author credit be retained in the source.
  25.     Joe Shannon, 566 Rock Road, State College, PA 16801
  26.     (814) 238-0029
  27.  
  28. ***************************************************************************/
  29.  
  30. #include    <BDSCIO.H>
  31. #include    "MXPRINT.H"
  32.  
  33. #define    FULL    60    /* full page */
  34. #define    FORM    0x0C    /* formfeed */
  35. #define LF    0x0A    /* ASCII linefeed */
  36. #define CR    0x0D    /* ASCII carriage return */
  37. #define    QEOF    0x1A    /* QED end of file mark */
  38. #define PNTWIDTH 80    /* normal printer line MAX */
  39.  
  40. char    rbuff[BUFSIZ];
  41. char    filename[20];
  42. char    fflag,eflag,lflag,cflag,nflag,pflag,iflag;
  43. int    linecount,pageno,maxwidth,frelength;
  44.  
  45. main(argc,argv)
  46. int    argc;
  47. char    **argv;
  48. {
  49. int    i,s,c,charcnt;
  50.  
  51.     maxwidth=PNTWIDTH;
  52.     _allocp = NULL;
  53.     fflag=eflag=lflag=cflag=nflag=pflag=0;
  54.     linecount=1;
  55.     pageno = 0;
  56.     if(argc<2) exit();
  57.     strcpy(filename,argv[1]);
  58.     printf("%s\n",filename);
  59.     if(fopen(filename,rbuff)==-1){
  60.         printf("Bad filename **");
  61.         exit();
  62.     };
  63.     while(--argc > 1 && argv[argc][0] == '-')
  64.         for(i=1;s=argv[argc][i];i++)
  65.             switch (tolower(s)){
  66.             case    'e':    eflag++ ; break;/* emphasized */
  67.             case    'l':    lflag++ ; break;/* large      */
  68.             case    'c':    cflag++ ; break;/* condensed  */
  69.             case    'p':    pflag++ ; break;/* page mode  */
  70.             case    'n':    nflag++ ; break;/* line #s    */
  71.             case    'f':    fflag++ ; break;/* free form  */
  72.             default:
  73.                 printf("illegal option **");
  74.                 exit();
  75.             }
  76.     pntint();
  77.     if(eflag) emppnt();
  78.     if(lflag) lrgpnt();
  79.     if(cflag) smlpnt();
  80.     if(fflag) freform();
  81.  
  82.     nextpg();
  83.     if(nflag) fprintf(2,"%3d: ",linecount);
  84.     charcnt=0;
  85.     while(1){
  86.         c=getc(rbuff);
  87.         if((c==EOF)||(c==CPMEOF)||(c==QEOF))    break;
  88.         if(c!=CR){
  89.             putc(c,2);
  90.             printf("%c",c);
  91.             if(++charcnt > maxwidth){
  92.                 ++linecount;
  93.                 charcnt=0;
  94.             }
  95.         }
  96.         else{
  97.             ++linecount;
  98.             if((linecount % FULL)== 0) nextpg();
  99.             if(lflag) lrgpnt();
  100.             if(nflag) fprintf(2,"%3d: ",linecount);
  101.             if((fflag)&&(linecount>=frelength)) frepause();
  102.             charcnt=0;
  103.         }
  104.         if((c==CR)&& lflag ) lrgpnt();
  105.     };
  106.     pntint();
  107.     if(fflag) pedon();
  108.     exit();
  109. }
  110. nextpg(){
  111.     if(++pageno > 1) fprintf(2,"%c",FORM);
  112.     if(pflag){
  113.     fprintf(2,"FILE: %s\t\t\t\t\t\tPage #%d\n",filename,pageno);
  114.     fprintf(2,"----------------------------------------");
  115.     fprintf(2,"----------------------------------------\n\n");
  116.     }
  117.     else if(!(fflag)) fprintf(2,"\n\n\n");
  118.     if(lflag) lrgpnt();
  119.     return;
  120. }
  121. freform(){
  122. char    inp;
  123.     inp=0;
  124.     frelength=FULL;
  125.     pedoff();
  126.     while((inp < '3') || (inp > '4')){
  127.         printf("\n FREE FORM MODE ");
  128.         printf("\n\n\t Choose option - \n");
  129.         printf("\t\t1- set maximum column width in chars.\n");
  130.         printf("\t\t2- set maximum page length in lines.\n");
  131.         printf("\t\t3- CONTINUE\n");
  132.         printf("\t\t4- QUIT PROGRAM\n");
  133.  
  134.         inp=getchar();
  135.         if(inp=='1') setcol();
  136.         if(inp=='2') setlen();
  137.         if(inp=='3') break;
  138.         if(inp=='4'){pntint();
  139.             if(fflag) pedon();
  140.             exit();
  141.         }
  142.     }
  143.     while(inp != 'y'){
  144.         printf("\nIs the printer turned on and the paper ");
  145.         printf("in place ??");
  146.         inp=getchar();
  147.     }
  148. }
  149. setcol(){
  150. int    i,size;
  151.     i=0;
  152.     while(i != 1 ){
  153.         printf("\n\tENTER maximum column width - ");
  154.         i=scanf("%d",&size);
  155.     }
  156.     maxwidth=size;
  157.     colsiz(size);
  158. }
  159. setlen(){
  160. int    i;
  161.     i=0;
  162.     while(i != 1 ){
  163.         printf("\n\tENTER maximum page length in lines - ");
  164.         i=scanf("%d",&frelength);
  165.     }
  166. }
  167.  
  168. frepause(){
  169. char    inp;
  170.     inp=0;
  171.     while((inp<'1') || (inp>'3')){
  172.         prbell();    /* sound printer bell */
  173.         printf("\n*** MAXIMUM LENGTH WARNING ***\n");
  174.         printf("\n\n\tChoose option - ");
  175.         printf("\n\n\t\t1- print one more line on page.");
  176.         printf("\n\t\t2- a new page is now in printer.");
  177.         printf("\n\t\t3- QUIT the program.\n\n");
  178.         inp=getchar();
  179.     }
  180.     if(inp=='1') return;
  181.     if(inp=='2'){ linecount=0;
  182.             return;
  183.     }
  184.     if(inp=='3'){pntint();
  185.             if(fflag) pedon();
  186.             exit();
  187.         }
  188. }
  189.